6f7d86137ed60682263ebc3b216e128ef445cacd,src/main/java/hudson/plugins/plot/XMLSeries.java,XMLSeries,loadSeries,#FilePath#PrintStream#,127

Before Change


		        // load existing plot file
	        	inputSource = new InputSource(in);
	        } catch (Exception e) {
				LOGGER.warning("Exception reading plot series data from: " + seriesFiles[0] + " " + e);
				return null;
			}
	
	    	if (LOGGER.isLoggable(defaultLogLevel))
	    		LOGGER.log(defaultLogLevel,"NodeType " + nodeTypeString + " : " + nodeType);

	    	if (LOGGER.isLoggable(defaultLogLevel))
        		LOGGER.log(defaultLogLevel,"Loaded XML Plot file: " + getFile());

    		XPath xpath = XPathFactory.newInstance().newXPath();
    		Object xmlObject = xpath.evaluate(xpathString, inputSource, nodeType);

    		/*
    		 * If we have a nodeset, we need multiples, otherwise we just need one value, and can do a toString()
    		 * to set it.  
    		 */
    		if (nodeType.equals(XPathConstants.NODESET))
    		{
    			NodeList nl = (NodeList) xmlObject;
    			
            	if (LOGGER.isLoggable(defaultLogLevel))
            		LOGGER.log(defaultLogLevel,"Number of nodes: " + nl.getLength());
    			
            	Map<Node, List<Node>> parentNodeMap = new HashMap<Node, List<Node>>();
            	
            	for (int i = 0; i < nl.getLength(); i++) {
    				Node node = nl.item(i);
    				Node parent = node.getParentNode();
    				List<Node>  nodeList = parentNodeMap.get(parent);
    				
    				// TODO:  Temp debug code:
    				Object obj = nl.item(i);
    				Object obj2 = node.getFirstChild();

    				// Make sure these nodes aren't all from the parent node:
    				if (node.getFirstChild() != null) {
    					if (nodeList == null) {
    						nodeList = new LinkedList<Node>();
    						parentNodeMap.put(parent, nodeList);
    					}

    					nodeList.add(node);
    				}
            	}
            	
            	int numParents = parentNodeMap.size();
            	int numNodes = nl.getLength();
            	
            	// If we found nodes with common parents, combine them:
            	if ((parentNodeMap.size() != 0) && (parentNodeMap.size() < nl.getLength())) {
            		Set<Map.Entry<Node, List<Node>>> entries = parentNodeMap.entrySet();
            		
            		// TODO:  Put in logging messages about what is being processed.
            		
            		// If there are multiple names and multiple values, we'll always use the 
            		// latest one.
            		for (Map.Entry<Node, List<Node>> entry : entries) {
            			String name = null;
            			String value = null;
            		    List<Node> nodeList = entry.getValue();
            		    
            		    for (Node node : nodeList) {
            		    	try {
            		    		Double.parseDouble(node.getTextContent());
            		    		value = node.getTextContent().trim();
            		    	} catch (NumberFormatException nfe) {
            		    		name = node.getTextContent().trim();
            		    	}
            		    }
            		    addValueToList(ret, name, value);
            		}
            		
            	} else {
            		for (int i = 0; i < nl.getLength(); i++) {
            			Node n = nl.item(i);

            			if (n != null && n.getLocalName() != null && n.getTextContent() != null) {
            				addNodeToList(ret, n);
            			}
            		}
            	}
    		} else if (nodeType.equals(XPathConstants.NODE)) {
    			addNodeToList(ret, (Node) xmlObject);
    		} else {
    			// otherwise we have a single type and can do a toString on it.
    			if (xmlObject instanceof NodeList) {
    				NodeList nl = (NodeList) xmlObject;
        			
                	if (LOGGER.isLoggable(defaultLogLevel))
                		LOGGER.log(defaultLogLevel,"Number of nodes: " + nl.getLength());
        			
        			for (int i = 0; i < nl.getLength(); i++) {
    					Node n = nl.item(i);
    					
    					if (n != null && n.getLocalName() != null && n.getTextContent() != null) {
    						addValueToList(ret, label, xmlObject);
    					}
    				}
    				
    			} else {
				    addValueToList(ret, label, xmlObject);
    			}
    		}
        
            return ret.toArray(new PlotPoint[ret.size()]);

        } catch (XPathExpressionException e) {
            //ignore
        	Throwable cause = e.getCause();
        	
        	if (LOGGER.isLoggable(defaultLogLevel))
        		LOGGER.log(defaultLogLevel,"XPathExpressionException for XPath '" + getXpath() + "': " + cause.getMessage());
		} finally {
        	if (in != null) {
                try {

After Change


	        try {
	            seriesFiles = workspaceRootDir.list(getFile());
	        } catch (Exception e) {
                LOGGER.log(Level.SEVERE, "Exception trying to retrieve series files", e);
	            return null;
	        }

            if (ArrayUtils.isEmpty(seriesFiles)) {
	        	LOGGER.info("No plot data file found: " + getFile());
	            return null;
	        }

	        try {
            	if (LOGGER.isLoggable(defaultLogLevel))
	        		LOGGER.log(defaultLogLevel,"Loading plot series data from: " + getFile());

	            in = seriesFiles[0].read();
		        // load existing plot file
	        	inputSource = new InputSource(in);
	        } catch (Exception e) {
                LOGGER.log(Level.SEVERE, "Exception reading plot series data from " + seriesFiles[0], e);
				return null;
			}

	    	if (LOGGER.isLoggable(defaultLogLevel))
	    		LOGGER.log(defaultLogLevel,"NodeType " + nodeTypeString + " : " + nodeType);

	    	if (LOGGER.isLoggable(defaultLogLevel))
        		LOGGER.log(defaultLogLevel,"Loaded XML Plot file: " + getFile());

    		XPath xpath = XPathFactory.newInstance().newXPath();
    		Object xmlObject = xpath.evaluate(xpathString, inputSource, nodeType);

    		/*
    		 * If we have a nodeset, we need multiples, otherwise we just need one value, and can do a toString()
    		 * to set it.
    		 */
    		if (nodeType.equals(XPathConstants.NODESET))
    		{
    			NodeList nl = (NodeList) xmlObject;

            	if (LOGGER.isLoggable(defaultLogLevel))
            		LOGGER.log(defaultLogLevel,"Number of nodes: " + nl.getLength());

            	Map<Node, List<Node>> parentNodeMap = new HashMap<Node, List<Node>>();

            	for (int i = 0; i < nl.getLength(); i++) {
    				Node node = nl.item(i);
    				Node parent = node.getParentNode();
    				List<Node>  nodeList = parentNodeMap.get(parent);

    				// TODO:  Temp debug code:
    				Object obj = nl.item(i);
    				Object obj2 = node.getFirstChild();

    				// Make sure these nodes aren't all from the parent node:
    				if (node.getFirstChild() != null) {
    					if (nodeList == null) {
    						nodeList = new LinkedList<Node>();
    						parentNodeMap.put(parent, nodeList);
    					}

    					nodeList.add(node);
    				}
            	}

            	int numParents = parentNodeMap.size();
            	int numNodes = nl.getLength();

            	// If we found nodes with common parents, combine them:
            	if ((parentNodeMap.size() != 0) && (parentNodeMap.size() < nl.getLength())) {
            		Set<Map.Entry<Node, List<Node>>> entries = parentNodeMap.entrySet();

            		// TODO:  Put in logging messages about what is being processed.

            		// If there are multiple names and multiple values, we'll always use the
            		// latest one.
            		for (Map.Entry<Node, List<Node>> entry : entries) {
            			String name = null;
            			String value = null;
            		    List<Node> nodeList = entry.getValue();

            		    for (Node node : nodeList) {
            		    	try {
            		    		Double.parseDouble(node.getTextContent());
            		    		value = node.getTextContent().trim();
            		    	} catch (NumberFormatException nfe) {
                                LOGGER.log(Level.SEVERE, "Exception converting to number", nfe);
            		    		name = node.getTextContent().trim();
            		    	}
            		    }
            		    addValueToList(ret, name, value);
            		}

            	} else {
            		for (int i = 0; i < nl.getLength(); i++) {
            			Node n = nl.item(i);

            			if (n != null && n.getLocalName() != null && n.getTextContent() != null) {
            				addNodeToList(ret, n);
            			}
            		}
            	}
    		} else if (nodeType.equals(XPathConstants.NODE)) {
    			addNodeToList(ret, (Node) xmlObject);
    		} else {
    			// otherwise we have a single type and can do a toString on it.
    			if (xmlObject instanceof NodeList) {
    				NodeList nl = (NodeList) xmlObject;

                	if (LOGGER.isLoggable(defaultLogLevel))
                		LOGGER.log(defaultLogLevel,"Number of nodes: " + nl.getLength());

        			for (int i = 0; i < nl.getLength(); i++) {
    					Node n = nl.item(i);

    					if (n != null && n.getLocalName() != null && n.getTextContent() != null) {
    						addValueToList(ret, label, xmlObject);
    					}
    				}

    			} else {
				    addValueToList(ret, label, xmlObject);
    			}
    		}

            return ret;

        } catch (XPathExpressionException e) {
            LOGGER.log(Level.SEVERE, "XPathExpressionException for XPath '" + getXpath() + "'", e);
		} finally {
            IOUtils.closeQuietly(in);
        }